﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace Z16.BLI
{
    public class Atividade
    {
        #region "Variaveis"

        private long intCodAtividade;
        public long IntCodAtividade
        {
            get { return intCodAtividade; }
            set { intCodAtividade = value; }
        }

        private string strNomeAtividade;
        public string StrNomeAtividade
        {
            get { return strNomeAtividade; }
            set { strNomeAtividade = value; }
        }

        private string strDescricao;
        public string StrDescricao
        {
            get { return strDescricao; }
            set { strDescricao = value; }
        }


        private int intHoraEstimada;
        public int IntHoraEstimada
        {
            get { return intHoraEstimada; }
            set { intHoraEstimada = value; }
        }

        private DateTime dtInicio;
        public DateTime DtInicio
        {
            get { return dtInicio; }
            set { dtInicio = value; }
        }

        private DateTime dtTermino;
        public DateTime DtTermino
        {
            get { return dtTermino; }
            set { dtTermino = value; }
        }

        private DateTime dtInicioPrev;
        public DateTime DtInicioPrev
        {
            get { return dtInicioPrev; }
            set { dtInicioPrev = value; }
        }

        private DateTime dtTerminoPrev;
        public DateTime DtTerminoPrev
        {
            get { return dtTerminoPrev; }
            set { dtTerminoPrev = value; }
        }

        private long intCodStatus;
        public long IntCodStatus
        {
            get { return intCodStatus; }
            set { intCodStatus = value; }
        }

        private string strStatus;
        public string StrStatus
        {
            get { return strStatus; }
            set { strStatus = value; }
        }

        private long intCodPrioridade;
        public long IntCodPrioridade
        {
            get { return intCodPrioridade; }
            set { intCodPrioridade = value; }
        }

        private string strNomePrioridade;
        public string StrNomePrioridade
        {
            get { return strNomePrioridade; }
            set { strNomePrioridade = value; }
        }

        private long intCodDemanda;
        public long IntCodDemanda
        {
            get { return intCodDemanda; }
            set { intCodDemanda = value; }
        }

        #endregion

        #region "Metodos"

        /// <summary>
        /// Seleciona todas as Atividades de uma Demanda.
        /// </summary>
        /// <returns></returns>
        public DataTable listarAtividades(long? CodDemanda, long? codAtividade,string nmAtividade,DateTime? dtIni, DateTime? dtFim, int? codStatus, int? codPrio )
        {
            List<Atividade> atividades = new List<Atividade>();
            Atividade atividade = new Atividade();

            DataTable ati = new DataTable();

            try
            {
                SqlParameter[] pms =
                    {
                        new SqlParameter("@codDemanda", CodDemanda),
                        new SqlParameter("@codAtividade", codAtividade),
                        new SqlParameter("@atividade", nmAtividade),
                        new SqlParameter("@dtIni", dtIni),
                        new SqlParameter("@dtFim", dtFim),
                        new SqlParameter("@codStatus",codStatus),
                        new SqlParameter("@codPrio",codPrio)
                    };

                SqlDataReader drAtividade = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelAtividade", pms);

                ati.Load(drAtividade);
            }
            catch (Exception ex)
            {
                throw;
            }
            return ati;

            //while (drAtividade.Read())
            //{
            //    atividade.IntCodAtividade = Convert.ToInt64(drAtividade["Cod_Atividade"].ToString());
            //    atividade.strNomeAtividade = drAtividade["Nome_Atividade"].ToString();
            //    atividade.StrDescricao = drAtividade["Descricao"].ToString();
            //    atividade.IntHoraEstimada = Convert.ToInt32(drAtividade["Estimativa_Horas"].ToString());
            //    atividade.DtInicio = Convert.ToDateTime(drAtividade["Data_Inicio"].ToString());
            //    atividade.DtTermino = Convert.ToDateTime(drAtividade["Data_Fim"].ToString());
            //    atividade.DtInicioPrev = Convert.ToDateTime(drAtividade["Data_Previsao_Inicio"].ToString());
            //    atividade.DtTerminoPrev =  Convert.ToDateTime(drAtividade["Data_Previsao_Fim"].ToString());
            //    atividade.IntCodStatus = Convert.ToInt64(drAtividade["Cod_Status"].ToString());
            //    atividade.IntCodPrioridade = Convert.ToInt64(drAtividade["Cod_Prioridade"].ToString());
            //    atividade.IntCodDemanda = Convert.ToInt64(drAtividade["Cod_Demanda"].ToString());
              

            //    atividades.Add(atividade);
 
            //}
            //return atividades;
        }

        /// <summary>
        ///  Inclusao inicial Atividade no sistema.
        /// </summary>
       
        public string incAtividades(   string strNomeAtividade,
                                            string strDescAtividade,
                                            string intEstimativa,
                                            DateTime dtInicio,
                                            DateTime dtTermino,
                                            DateTime dtInicioPrev,
                                            DateTime dtTerminoPrev,
                                            int intCodStatus,
                                            int intCodPrioridade,
                                            int? intcodDemanda,
                                            int? intcodAtividade
                                            )
        {
            try
            {

                SqlParameter[] pms =
                    {
                        new SqlParameter("@Nome_Atividade", strNomeAtividade),
                        new SqlParameter("@Descricao", strDescAtividade),
                        new SqlParameter("@Estimativa_Horas", intEstimativa),
                        new SqlParameter("@DT_INICIO", dtInicio),
                        new SqlParameter("@Data_Fim", dtTermino),
                        new SqlParameter("@Data_Previsao_Inicio", dtInicioPrev),
                        new SqlParameter("@Data_Previsao_Fim", dtTerminoPrev),
                        new SqlParameter("@Cod_Status", intCodStatus),
                        new SqlParameter("@Cod_Prioridade", intCodPrioridade),
                        new SqlParameter("@Cod_Demanda", intcodDemanda),
                        new SqlParameter("@Cod_Atividade", intcodAtividade)
                    };

                if (intcodAtividade == null)
                {
                    SqlHelper.ExecuteNonQuery(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procIncAtividade", pms);

                    return "0;Atividade cadastrada com sucesso!";
                }
                else
                {
                    SqlHelper.ExecuteNonQuery(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procEditAtividade", pms);

                    return "0;Atividade editada com sucesso!";
                }
            }
            catch (Exception ex)
            {
                return "1;Erro ao inserir Atividade: " + ex.Message;

            }
        }

        public List<Atividade> listarStatus()
        {
            SqlParameter[] pms =
                    {
                        new SqlParameter("@codStatus",null),
                    };

            List<Atividade> allClientes = new List<Atividade>();


            SqlDataReader drCliente = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelStatus", pms);
            while (drCliente.Read())
            {
                Atividade atividade = new Atividade();
                atividade.intCodStatus = Convert.ToInt64(drCliente["Cod_Status"].ToString());
                atividade.strStatus = drCliente["Nome_Status"].ToString();
                allClientes.Add(atividade);
            }
            return allClientes;


        }

        public List<Atividade> listarPrioridade()
        {
            SqlParameter[] pms =
                    {
                        new SqlParameter("@codPrio",null),
                    };

            List<Atividade> allClientes = new List<Atividade>();


            SqlDataReader drCliente = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelPrioridade", pms);
            while (drCliente.Read())
            {
                Atividade atividade = new Atividade();
                atividade.intCodPrioridade = Convert.ToInt64(drCliente["Cod_Prioridade"].ToString());
                atividade.strNomePrioridade = drCliente["Prioridade"].ToString();
                allClientes.Add(atividade);
            }
            return allClientes;


        }

        public decimal CalcularComplexidade( int[,] valores)
        {
            decimal total = 0;
            int i = 1;
            int j = 1;
            decimal valor;
            DataTable ati = new DataTable();

            for (i = 1; i < 14; i++)
            {
                for (j = 1; j < 6; j++)
                {
                    try
                    {
                        SqlParameter[] pms =
                    {
                        new SqlParameter("@Camada", i),
                        new SqlParameter("@Complexidade ", j)
                    };

                        SqlDataReader drAtividade = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "selValorComplexidade", pms);
                        ati = new DataTable();
                        ati.Load(drAtividade);
                    }
                    catch
                    {
                    }

                    valor = valores[i, j] * decimal.Parse(ati.Rows[0]["valor"].ToString());
                    total = total + valor;
                }
            }
            total = total * (decimal)1.5;
                    
          
            return total;
        }

        public float CalcularComplexidade(int codCamada, int codComplexidade, float valorCC)
        {
            float valor = 0;
            DataTable ati = new DataTable();

            try
            {
                SqlParameter[] pms =
                    {
                        new SqlParameter("@Camada", codCamada),
                        new SqlParameter("@Complexidade ", codComplexidade)
                    };

                SqlDataReader drAtividade = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "selValorComplexidade", pms);
                ati = new DataTable();
                ati.Load(drAtividade);
            }
            catch
            {
            }

            if (ati.Rows.Count > 0)
                valor = valorCC * float.Parse(ati.Rows[0]["valor"].ToString());

            return valor;
        }

        #endregion

    }
}